/*****************************************************
 * 支出項目の一覧を表すデータクラス
 * @author kino
 *****************************************************/
function OutgoingResults(){
	/** プロパティの継承 */
	AbstractResults.call(this, ItemType.OUTGOING);
}

/** メソッドの継承 */
ClassUtility.inherit(OutgoingResults, AbstractResults);

/**
 * 
 * @param {Object} evaledJson response/result 以下
 */
OutgoingResults.prototype.fromJson = function(evaledJson){
	if(evaledJson.type != this.itemType){
		throw new Error('想定外のデータ型: require=' + this.itemType + ' actual=' + evaledJson.type);
	}
	this.length = 0;
    for (var i = 0; i < evaledJson.rows.length; i++) {
        var result = new OutgoingResult();
        result.fromJson(evaledJson.rows[i]);
        this.push(result);
    }
}


/*****************************************************
 * 支出項目詳細画面の結果一覧の1行分のデータ。
 * @param {int} budgetId 予算項目の識別子
 * @param {String} budgetName 予算項目の表示名
 * @param {Object} outgoingId 支出項目の識別子
 * @param {Object} outgoingName 支出項目の表示名
 * @param {int} outgoing 支出金額
 * @param {Date} resistDate 支出を登録した日
 *****************************************************/
function OutgoingResult(budgetId, budgetName, outgoingId, outgoingName, outgoing, resistDate){
    /** {int} 予算項目の識別子 */
    this.budgetId = budgetId;
    
    /** {String} 予算項目の表示名 */
    this.budgetName = budgetName;
    
    /** {int} 支出項目の識別子 */
    this.outgoingId = outgoingId;
    
    /** {String} 支出項目の表示名 */
    this.outgoingName = outgoingName;
    
    /** {int} 支出金額 */
    this.outgoing = outgoing;
	
	/** {Date} 支出を登録した日 */
	this.resistDate = resistDate;
}

/**
 * 支出項目詳細画面の結果一覧の1行分のデータをJSON形式で表した文字列を返す。
 */
OutgoingResult.prototype.toJson = function(){
    var resultParts = new Array();
    resultParts.push('{"budgetId":');
    resultParts.push(this.budgetId);
    resultParts.push(', "budgetName":"');
    resultParts.push(this.budgetName);
    resultParts.push(', "outgoingId":');
    resultParts.push(this.outgoingId);
    resultParts.push(', "outgoingName":"');
    resultParts.push(this.outgoingName);
    resultParts.push('", "outgoing":');
    resultParts.push(this.outgoing);
	resultParts.push(', "resistDate":');
	resultParts.push(this.resistDate.getTime());
    resultParts.push('}');
    return resultParts.join('');
}

/**
 * 支出項目詳細画面の結果一覧の1行分のデータに相当するJSON表現をeval()した結果オブジェクトから、データを復元する。
 * @param {JSON} evaledJson eval()したJSON表現。
 */
OutgoingResult.prototype.fromJson = function(evaledJson){
    this.budgetId = evaledJson.budgetId;
    this.budgetName = evaledJson.budgetName;
    this.outgoingId = evaledJson.outgoingId;
    this.outgoingName = evaledJson.outgoingName;
    this.outgoing = evaledJson.outgoing;
	this.resistDate = new Date();
	this.resistDate.setTime(evaledJson.dateTime);
}
